File: Scripts\Engines\Craft\Core\CraftItem.cs

[SEARCH FOR]
			else // ConstumeType.None ( it's basicaly used to know if the crafter has enough resource before starting the process )
			{
				index = -1;

				if ( IsQuantityType( types ) )
				{
					for ( int i = 0; i < types.Length; i++ )
					{
						if ( GetQuantity( ourPack, types[i] ) < amounts[i] )
						{
							index = i;
							break;
						}
					}
				}
				else
				{
					for ( int i = 0; i < types.Length; i++ )
					{
						if ( ourPack.GetBestGroupAmount( types[i], true, new CheckItemGroup( CheckHueGrouping ) ) < amounts[i] )
						{
							index = i;
							break;
						}
					}
				}
			}
			
[REPLACE WITH]
			else // ConstumeType.None ( it's basicaly used to know if the crafter has enough resource before starting the process )
			{
				index = -1;

				if ( IsQuantityType( types ) )
				{
					for ( int i = 0; i < types.Length; i++ )
					{
						if ( GetQuantity( ourPack, types[i] ) < amounts[i] )
						{
							index = i;
							break;
						}
					}
				}
				else
				{
					for ( int i = 0; i < types.Length; i++ )
					{
						if ( ourPack.GetBestGroupAmount( types[i], true, new CheckItemGroup( CheckHueGrouping ) ) < amounts[i] )
						{
							// UNIVERSAL STORAGE KEYS START
							//perform a scan and withdraw of the requested resource if it is found.  If not, then let the standard
							//operation continue
							if( BaseStoreKey.CraftWithdraw( ourPack, types[i], amounts[i] ) )
							{
								//this overrides the failure condition and lets the thread continue on with the next type in the
								//types list
								continue;
							}
							//otherwise, report not found and abort
							// UNIVERSAL STORAGE KEYS END
							
							index = i;
							break;
						}
					}
				}
			}
			
			
			
[SEARCH FOR]

				if ( consumeExtra == null )
				{
					message = 1044253; // You don't have the components needed to make that.
					return false;
				}



[REPLACE WITH]
				if ( consumeExtra == null )
				{
					//if you can withdraw from keys
					if( BaseStoreKey.CraftWithdraw( ourPack, new Type[]{ typeof( RecallRune ) }, 1 ) )
					{
						//flag the reference to the newly withdrawn item
						consumeExtra = BaseStoreKey.LastWithdrawn;
					}
					else
					{
						message = 1044253; // You don't have the components needed to make that.
						return false;
					}
				}

[SEARCH FOR]
				if ( IsQuantityType( types ) )
				{
					for ( int i = 0; i < types.Length; i++ )
					{
						if ( GetQuantity( ourPack, types[i] ) < amounts[i] )
						{
							index = i;
							break;
						}
					}
				}
				
[REPLACE WITH]
				if ( IsQuantityType( types ) )
				{
					for ( int i = 0; i < types.Length; i++ )
					{
						if ( GetQuantity( ourPack, types[i] ) < amounts[i] )
						{
							if( BaseStoreKey.CraftWithdraw( ourPack, types[i], amounts[i] ) )
							{
								continue;
							}
							index = i;
							break;
						}
					}
				}
				